package com.gdust.lease.web.admin.controller.apartment;


import com.gdust.lease.common.result.Result;
import com.gdust.lease.model.entity.PaymentType;
import com.gdust.lease.web.admin.service.PaymentTypeService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * 房间支付方式管理
 */
@Tag(name = "支付方式管理")
@RequestMapping("/admin/payment")
@RestController// @RestController: 专用于restful风格的注解 = @Controller (控制器) + @ResponseBody (方法返回值为json)
public class PaymentTypeController {
    //注入支付方式表的service
    @Autowired
    private PaymentTypeService paymentTypeService;

    /**
     * 查询全部支付方式列表接口
     *
     * @return Result<List<PaymentType>> 返回包含所有支付方式的响应结果
     */
    @Operation(summary = "查询全部支付方式列表") // Swagger 注解，用于描述接口功能
    @GetMapping("list") // 标识 GET 请求的映射路径为 /list
    public Result<List<PaymentType>> listPaymentType() {
        // 调用 MyBatis-Plus 提供的封装方法，查询所有支付方式的记录
        List<PaymentType> list = paymentTypeService.list();
        // 返回封装的响应结果，状态为成功，同时返回支付方式的列表数据
        return Result.ok(list);
    }


    /**
     * 保存或更新支付方式
     * @param paymentType 支付方式表 内含：付款方式名称、每次支付租期数、付费说明
     * @return
     */
    @Operation(summary = "保存或更新支付方式")
    @PostMapping("saveOrUpdate")
    @Transactional// 开启事务支持，确保操作的一致性
    public Result saveOrUpdatePaymentType(@RequestBody PaymentType paymentType) {
        //调用 MyBatis-Plus 提供的封装方法，保存或更新支付方式
        paymentTypeService.saveOrUpdate(paymentType);
        return Result.ok();
    }

    @Operation(summary = "根据ID删除支付方式")
    @DeleteMapping("deleteById")
    @Transactional// 开启事务支持，确保操作的一致性
    public Result deletePaymentById(@RequestParam Long id) {
        //调用 MyBatis-Plus 提供的封装方法，根据ID删除支付方式
        paymentTypeService.removeById(id);
        return Result.ok();
    }

}
